package com.asm.blog.common.exception;

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

/*
Shiro使用JWT的时候在Filter里做身份验证，
然后在里面catch捕获并抛出了自定义异常。
我们这边是用的RestControllerAdvice做统一异常处理，
然后这个异常并没有被RestControllerAdvice
----------------------------------------------------------------------
原因
请求进来 会按照 filter -> interceptor -> controllerAdvice -> aspect -> controller的顺序调用

当controller返回异常 也会按照controller -> aspect -> controllerAdvice -> interceptor -> filter来依次抛出
----------------------------------------------------------------------
这种Filter发生的404、405、500错误都会到Spring默认的异常处理。
如果你在配置文件配置了server.error.path的话，就会使用你配置的异常处理地址，
如果没有就会使用你配置的error.path路径地址，
如果还是没有，默认使用/error来作为发生异常的处理地址
 */
@Controller
public class ErrorControllerImpl implements ErrorController {

    @RequestMapping("/error")
    public void handleError(HttpServletRequest request) throws Throwable {

        if (request.getAttribute("javax.servlet.error.exception") != null) {
            throw (Throwable) request.getAttribute("javax.servlet.error.exception");
        }

    }
}
